package main

import "fmt"

type Log struct {
}

// 接受者为指针类型时不会报空指针，Go 允许对 nil 指针调用方法，只要该方法内部没有访问接收者的字段或方法
// 接受者不是指针类型时会报空指针，需要解引用以获取其值 nil无法进行解引用操作，导致运行时引发空指针异常
func (m *Log) Info(msg string) {
	fmt.Println("日志内容：", msg)
}

type LogProxy struct {
	log *Log
}

func (m *LogProxy) Info(msg string) {
	// 打印前
	fmt.Println("打印前")
	m.log.Info(msg)
	// 打印后
	fmt.Println("打印后")
}

func main() {
	log := &LogProxy{}
	log.Info("hello world")
}
